home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / etc / RCS / status.c,v < prev    next >
Text File  |  1991-10-23  |  14KB  |  497 lines

  1. head     1.10;
  2. branch   ;
  3. access   ;
  4. symbols  sprited:1.8.1;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.10
  10. date     91.10.23.16.46.56;  author mgbaker;  state Exp;
  11. branches ;
  12. next     1.9;
  13.  
  14. 1.9
  15. date     91.10.23.16.32.13;  author rab;  state Exp;
  16. branches ;
  17. next     1.8;
  18.  
  19. 1.8
  20. date     91.08.08.15.25.14;  author kupfer;  state Exp;
  21. branches 1.8.1.1;
  22. next     1.7;
  23.  
  24. 1.7
  25. date     91.08.08.15.12.30;  author jhh;  state Exp;
  26. branches ;
  27. next     1.6;
  28.  
  29. 1.6
  30. date     90.02.22.11.08.10;  author douglis;  state Exp;
  31. branches ;
  32. next     1.5;
  33.  
  34. 1.5
  35. date     89.10.24.12.26.28;  author jhh;  state Exp;
  36. branches ;
  37. next     1.4;
  38.  
  39. 1.4
  40. date     89.08.08.12.52.30;  author douglis;  state Exp;
  41. branches ;
  42. next     1.3;
  43.  
  44. 1.3
  45. date     89.06.21.14.04.49;  author ouster;  state Exp;
  46. branches ;
  47. next     1.2;
  48.  
  49. 1.2
  50. date     88.08.02.12.40.51;  author douglis;  state Exp;
  51. branches ;
  52. next     1.1;
  53.  
  54. 1.1
  55. date     88.07.01.09.41.00;  author ouster;  state Exp;
  56. branches ;
  57. next     ;
  58.  
  59. 1.8.1.1
  60. date     91.08.19.21.15.48;  author kupfer;  state Exp;
  61. branches ;
  62. next     ;
  63.  
  64.  
  65. desc
  66. @@
  67.  
  68.  
  69. 1.10
  70. log
  71. @Added 2 missing messages.
  72. @
  73. text
  74. @/*
  75.  * status.c --
  76.  *
  77.  *     Returns the message associated with a status value in 
  78.  *    the status.h file.
  79.  *
  80.  * Copyright 1986 Regents of the University of California
  81.  * Permission to use, copy, modify, and distribute this
  82.  * software and its documentation for any purpose and without
  83.  * fee is hereby granted, provided that the above copyright
  84.  * notice appear in all copies.  The University of California
  85.  * makes no representations about the suitability of this
  86.  * software for any purpose.  It is provided "as is" without
  87.  * express or implied warranty.
  88.  */
  89.  
  90. #ifndef lint
  91. static char rcsid[] = "$Header: /sprite/src/lib/c/etc/RCS/status.c,v 1.9 91/10/23 16:32:13 rab Exp Locker: mgbaker $ SPRITE (Berkeley)";
  92. #endif not lint
  93.  
  94. #include <sprite.h>
  95. #include <status.h>
  96. #include <stdio.h>
  97.  
  98. typedef struct {
  99.     char *name;
  100.     char **array;
  101.     int   size;
  102. } StatusMsgs;
  103.  
  104. /*---------------------------------------------*/
  105.  
  106. /* Many of the gen messages are from string/strerror.c */
  107. /*    gen.stat    */
  108. static char *genStatusMsgs[] = {
  109. "the operation was successful",
  110. "there was an error",
  111. "the system call was aborted by a signal",
  112. "the user did not have the required permission",
  113. "this operation or feature isn't implemented",
  114. "an argument to a call was invalid",
  115. "the operation did not complete within the timeout period.",
  116. "not owner",                /* EPERM */
  117. "no such file or directory",        /* ENOENT */
  118. "interrupted system call",        /* EINTR */
  119. "argument list too long",        /* E2BIG */
  120. "no more processes",            /* EAGAIN */
  121. "permission denied",            /* EACCESS */
  122. "bad address in system call argument",    /* EFAULT */
  123. "file already exists",            /* EEXIST */
  124. "invalid argument",            /* EINVAL */
  125. "file too large",            /* EFBIG */
  126. "no space left in file system domain",    /* ENOSPC */
  127. "math result unrepresentable",        /* ERANGE */
  128. "identifier removed",            /* EIDRM */
  129. };
  130.  
  131. /*    proc.stat    */
  132. static char *procStatusMsgs[] = {
  133. "the file name to exec was not null terminated",
  134. "the a.out format of the file to be exec'd was incorrect",
  135. "the virtual memory system ran out of segments",
  136. "you are the child of a fork",
  137. "proc_Wait did not find any exited or detached processes of interest",
  138. "the process ID is not in the proper range or the process doesn't exist",
  139. "the specified process's user ID does not match the current process's uid",
  140. "the process doesn't have any children to wake it up from Proc_Wait",
  141. "the family ID is not in the proper range or the family doesn't exist",
  142. "the variable trying to be retrieved from the environment has not been set",
  143. "the environment variable name or value was not null terminated",
  144. "the environment has reached its maximum size and all entries are in use",
  145. "the node identifier for process migration is not a valid node specifier",
  146. "the node is refusing to accept processes for migration",
  147. "a string passed to a system call was not null terminated",
  148. "no kernel stacks are available (too many processes)",
  149. "the peer process of a migrated process does not exist",
  150. };
  151.  
  152. /*    sys.stat    */
  153. static char *sysStatusMsgs[] = {
  154. "address given by the user for a system call was bad",
  155. "the argument to a system call was invalid",
  156. "the constant specified for a system call was invalid",
  157. };
  158.  
  159. /*    rpc.stat    */
  160. static char *rpcStatusMsgs[] = {
  161. "a consistency check revealed an invalid parameter passed to an RPC routine",
  162. "no channels were available to conduct a Remote Procedure Call",
  163. "no Reply to an RPC request within a threshold time limit",
  164. "received a large number of acknowledgments but no answer to an RPC request",
  165. "a consistency check revealed an internal error in the RPC system",
  166. "the server received a request with an invalid procedure id",
  167. "the client received a null error code from the server",
  168. "the parameter area for the RPC was more that 1K",
  169. "the data area for the RPC was more that 16K",
  170. "there is no reply for this RPC",
  171. "the host is up (booting), but its RPC system is off",
  172. "a client with a `ramp down' policy received a negative ack from a server",
  173. "the requested prefix does not exist",
  174. };
  175.  
  176. /*    fs.stat    */
  177. static char *fsStatusMsgs[] = {
  178. "the permissions on the file prohibit the requested access",
  179. "bad argument to a filesystem routine",
  180. "the operation on the remote file is not supported",
  181. "the operation on the local file is not supported",
  182. "the operation on the device file is not supported",
  183. "the new stream ID requested is too large",
  184. "the master process of a pseudo-device has closed its connection (INTERNAL)",
  185. "the reader of the pipe died",
  186. "no disk space available for write",
  187. "lookup re-direct from a file server (INTERNAL)",
  188. "there is no file handle for a prefix (INTERNAL)",
  189. "new information has been added to the prefix table (INTERNAL)",
  190. "the file does not exist",
  191. "the read or write call could not complete immediately",
  192. "the buffer is too large to be written",
  193. "an invalid operation was attempted on a directory",
  194. "a non-directory file was specified where a directory was needed",
  195. "the caller did not own the file",
  196. "the file handle is out of date",
  197. "the file already exists",
  198. "an attempt was made to delete a non-empty directory",
  199. "too many links were expanded during name lookup",
  200. "a Rename or HardLink was attempted between domains",
  201. "the operation did not complete within the specified time",
  202. "no shared lock is held on the file",
  203. "no exclusive lock is held on the file",
  204. "the file's type doesn't match what is required by Fs_Open",
  205. "the file has been removed by the server (INTERNAL)",
  206. "the file can't be used or is busy already",
  207. "the stream does not support reposition of the read write access position",
  208. "the domain is not attached",
  209. "version mis-match on reopen (INTERNAL)",
  210. "the file isn't cacheable on a remote client (INTERNAL)",
  211. };
  212.  
  213. /*    vm.stat    */
  214. static char *vmStatusMsgs[] = {
  215. "the address given to allocate virtual memory was not in a heap or code segment",
  216. "there is insufficient virtual memory in the segment to expand it",
  217. "a read from the file server on a page fault returned less than a page",
  218. "a write to the file server wrote less than a page",
  219. "the swap file for the process could not either be opened, read, or written",
  220. "the virtual memory system ran out of segments",
  221. };
  222.  
  223. /*    sig.stat    */
  224. static char *sigStatusMsgs[] = {
  225. "the signal number is not in the range 0 to 31",
  226. "the action is not one of the valid actions",
  227. };
  228.  
  229. /*    dev.stat    */
  230. static char *devStatusMsgs[] = {
  231. "a bus error occurred during DMA because something wasn't mapped",
  232. "the device unit number doesn't correspond to an existing device",
  233. "the device did not respond after a timeout period",
  234. "the device is off-line",
  235. "the handshaking protocol with the device failed",
  236. "too many retriable errors occurred",
  237. "no such device exists",
  238. "an invalid argument was passed to a device driver",
  239. "a device encountered a hard, uncorrectable, error",
  240. "the end of tape was encountered during a command",
  241. "no tape reel or cartridge is loaded in the drive",
  242. "a command to a device completed prematurely",
  243. "there is no current sense information",
  244. "an attempt was made to rewrite write-once data or to read unwritten data",
  245. "the device is busy",
  246. "the device has been reset",
  247. };
  248.  
  249. /*    net.stat    */
  250. static char *netStatusMsgs[] = {
  251. "the remote network cannot be reached from this host.",
  252. "the remote host is cannot be reached from this host.",
  253. "the remote host refused to accept the connection.",
  254. "the connection was reset by the remote host.",
  255. "no connection requests are pending.",
  256. "the socket is already connected to a remote peer.",
  257. "the socket is not connected to a remote peer.",
  258. "the socket address is already in use.",
  259. "the socket address is not available on this host.",
  260. "an unknown protocol was specified.",
  261. "an invalid operation was attempted on the socket.",
  262. "an invalid option was specified.",
  263. };
  264.  
  265. static StatusMsgs statusMsgs[] = {
  266.     {"Gen",      genStatusMsgs       ,      20},
  267.     {"Proc",      procStatusMsgs      ,      17},
  268.     {"Sys",      sysStatusMsgs       ,      3},
  269.     {"Rpc",      rpcStatusMsgs       ,      11},
  270.     {"Fs",      fsStatusMsgs        ,      33},
  271.     {"Vm",      vmStatusMsgs        ,      6},
  272.     {"Sig",      sigStatusMsgs       ,      2},
  273.     {"Dev",      devStatusMsgs       ,      16},
  274.     {"Net",      netStatusMsgs       ,      12},
  275. };
  276. static int maxNumModules = 9;
  277.  
  278. /*---------------------------------------------*/
  279.  
  280.  
  281. /*
  282.  *-----------------------------------------------------------------------
  283.  *
  284.  * Stat_GetMsg --
  285.  *
  286.  *    Given a ReturnStatus, return a string indicating the meaning
  287.  *    of the status.
  288.  *
  289.  * Results:
  290.  *    A pointer to a statically-allocated string. If the status is
  291.  *    invalid, a customized error message is returned.
  292.  *
  293.  * Side Effects:
  294.  *    None
  295.  *
  296.  *-----------------------------------------------------------------------
  297.  */
  298.  
  299. char *
  300. Stat_GetMsg(status)
  301.     ReturnStatus  status;       /* Status for which message is desired */
  302. {
  303.     int              module = STAT_MODULE(status);
  304.     int              msg = STAT_MSGNUM(status);
  305.     static  char  errMsg[100];        /* static space for erroneous stati */
  306.  
  307.     if (module >= maxNumModules) {
  308.     (void) sprintf(errMsg, "Warning: invalid module # in status %x",
  309.                status);
  310.     return(errMsg);
  311.     } else if (msg >= statusMsgs[module].size) {
  312.     (void) sprintf(errMsg,
  313.               "Warning: invalid message # for %s module in status %x", 
  314.                statusMsgs[module].name, status);
  315.     return(errMsg);
  316.     } else {
  317.     return(statusMsgs[module].array[msg]);
  318.     }
  319. }
  320. @
  321.  
  322.  
  323. 1.9
  324. log
  325. @Mary checking this in for Bob so I can add some missing messages.
  326. @
  327. text
  328. @d18 1
  329. a18 1
  330. static char rcsid[] = "$Header: /sprite/src/lib/c/etc/RCS/status.c,v 1.8 91/08/08 15:25:14 kupfer Exp Locker: rab $ SPRITE (Berkeley)";
  331. d99 2
  332. @
  333.  
  334.  
  335. 1.8
  336. log
  337. @Add strings for GEN_EPERM through GEN_EIDRM, taking them from
  338. string/sterror.c
  339. @
  340. text
  341. @d18 1
  342. a18 1
  343. static char rcsid[] = "$Header: /sprite/src/lib/c/etc/RCS/status.c,v 1.7 91/08/08 15:12:30 jhh Exp Locker: kupfer $ SPRITE (Berkeley)";
  344. d233 1
  345. a233 1
  346.     sprintf(errMsg, "Warning: invalid module # in status %x",
  347. d237 1
  348. a237 1
  349.     sprintf(errMsg,
  350. @
  351.  
  352.  
  353. 1.8.1.1
  354. log
  355. @Initial branch for Sprite server.
  356. @
  357. text
  358. @d18 1
  359. a18 1
  360. static char rcsid[] = "$Header: /sprite/src/lib/c/etc/RCS/status.c,v 1.8 91/08/08 15:25:14 kupfer Exp $ SPRITE (Berkeley)";
  361. @
  362.  
  363.  
  364. 1.7
  365. log
  366. @Add "device has been reset" message (Mike checking in for John).
  367. @
  368. text
  369. @d18 1
  370. a18 1
  371. static char rcsid[] = "$Header: /sprite/src/lib/c/etc/RCS/status.c,v 1.6 90/02/22 11:08:10 douglis Exp $ SPRITE (Berkeley)";
  372. d33 1
  373. d43 13
  374. d191 1
  375. a191 1
  376.     {"Gen",      genStatusMsgs       ,      7},
  377. @
  378.  
  379.  
  380. 1.6
  381. log
  382. @incremented count of dev status values.
  383. @
  384. text
  385. @d18 1
  386. a18 1
  387. static char rcsid[] = "$Header: /sprite/src/lib/c/etc/RCS/status.c,v 1.5 89/10/24 12:26:28 jhh Exp Locker: douglis $ SPRITE (Berkeley)";
  388. d157 1
  389. d184 1
  390. a184 1
  391.     {"Dev",      devStatusMsgs       ,      15},
  392. @
  393.  
  394.  
  395. 1.5
  396. log
  397. @moved Stat_PrintMsg out of here so we can include this file in the kernel
  398. without sucking in most of the stdio library.
  399. @
  400. text
  401. @d18 1
  402. a18 1
  403. static char rcsid[] = "$Header: /sprite/src/lib/c/etc/RCS/status.c,v 1.4 89/08/08 12:52:30 douglis Exp $ SPRITE (Berkeley)";
  404. d183 1
  405. a183 1
  406.     {"Dev",      devStatusMsgs       ,      14},
  407. @
  408.  
  409.  
  410. 1.4
  411. log
  412. @clarified PROC_NO_PEER error msg.
  413. @
  414. text
  415. @d4 1
  416. a4 1
  417.  *     Prints the message associated with a status value in 
  418. d18 1
  419. a18 1
  420. static char rcsid[] = "$Header: /sprite/src/lib/c/etc/RCS/status.c,v 1.3 89/06/21 14:04:49 ouster Exp Locker: douglis $ SPRITE (Berkeley)";
  421. a229 33
  422.  
  423. /*
  424.  *----------------------------------------------------------------------
  425.  *
  426.  * Stat_PrintMsg --
  427.  *
  428.  *    Output an error message.
  429.  *
  430.  * Results:
  431.  *    None.
  432.  *
  433.  * Side effects:
  434.  *    A message gets printed on standard error, of the form
  435.  *    "string: message", where "string" is the argument to this
  436.  *    procedure and "message" is the standard error message
  437.  *    associated with "status".
  438.  *
  439.  *----------------------------------------------------------------------
  440.  */
  441.  
  442. void
  443. Stat_PrintMsg(status, string)
  444.     ReturnStatus status;        /* Error status. */
  445.     char *string;            /* Identifying string to output before
  446.                      * the error message string. */
  447. {
  448.     if (string == NULL) {
  449.     fprintf(stderr, "%s\n", Stat_GetMsg(status));
  450.     } else {
  451.     fprintf(stderr, "%s: %s\n", string, Stat_GetMsg(status));
  452.     }
  453. }
  454.  
  455. @
  456.  
  457.  
  458. 1.3
  459. log
  460. @Added new error message.
  461. @
  462. text
  463. @d18 1
  464. a18 1
  465. static char rcsid[] = "$Header: /sprite/src/lib/c/etc/RCS/status.c,v 1.2 88/08/02 12:40:51 douglis Exp Locker: ouster $ SPRITE (Berkeley)";
  466. d62 1
  467. a62 1
  468. "the peer processes of a migrated process no longer exists on its home node",
  469. @
  470.  
  471.  
  472. 1.2
  473. log
  474. @added PROC_NO_PEER status info.
  475. @
  476. text
  477. @d18 1
  478. a18 1
  479. static char rcsid[] = "$Header: status.c,v 1.1 88/07/01 09:41:00 ouster Exp $ SPRITE (Berkeley)";
  480. d156 1
  481. @
  482.  
  483.  
  484. 1.1
  485. log
  486. @Initial revision
  487. @
  488. text
  489. @d18 1
  490. a18 1
  491. static char rcsid[] = "$Header: status.c.head,v 2.0 87/08/11 09:39:25 brent Exp $ SPRITE (Berkeley)";
  492. d62 1
  493. d176 1
  494. a176 1
  495.     {"Proc",      procStatusMsgs      ,      16},
  496. @
  497.